// 导入数据库处理模块
const db = require('../db')
// 导入对密码加密的库
const bcrypt = require('bcryptjs')
// 导入jsonwebtoken库
const jwt = require('jsonwebtoken')
// 导入密钥
const config = require('../config')

// 注册的处理函数
exports.regester = (req,res)=> { 
    const userinfo = req.body
    // 查询数据库username是否重复
    const sqlstr = 'select * from yeb_user where username =?'
    db.query(sqlstr,userinfo.username,(err,result)=> { 
        if(err){ 
            return res.echo(err)
        }
        // 用户名被占用
        if(result.length > 0) { 
            return res.echo('用户名被占用！')
        }
        // 对密码进行加密
        userinfo.password = bcrypt.hashSync(userinfo.password,10)
        console.log(userinfo);    
        // 插入新用户
        const sqlstr2 = 'insert into yeb_user set ?'
        db.query(sqlstr2,{username:userinfo.username,password:userinfo.password},(err,result)=>{ 
            if(err) { 
                return res.echo(err)
            }
            if(result.affectedRows !==1 ){ 
                return res.echo('新用户注册失败，请稍后重试！')
            }
            // 注册成功
            res.echo('新用户注册成功！',0)
        })
    })
}

// 登录接口的处理函数
exports.login = (req,res)=>{ 
    const userinfo = req.body
    const sqlstr = 'select * from yeb_user where username = ?'
    db.query(sqlstr,userinfo.username,(err,result)=>{ 
        if(err) return res.echo(err)
        if(result.length === 0) { 
            return res.echo('用户名不存在！')
        }
        // 判断用户输入的密码和数据库中的密码是否一致
        // joi.compareSync 用来验证比较加密之后的密码和用户输入的密码是否一致 返回一个布尔值
        const compareResult = bcrypt.compareSync(userinfo.password,result[0].password)
        if(!compareResult) { 
            return res.echo('密码错误，请重新输入')
        }
        // console.log(`选择：${req.body.usertype}，数据库:${result[0].usertype}`);
        // 判断是否为管理员
        if(req.body.usertype == '管理员' && result[0].usertype == '用户'){ 
            return res.echo('登录失败，请以用户身份登录！')
        }
        else if (req.body.usertype=='用户' && result[0].usertype == '管理员'){
            return res.echo('登陆失败，请以管理员身份登录！')
        } else {
            // 生成token
            // 1.剔除敏感信息 - 将用户密码和头像挑出
            // console.log({...result[0]});
            const user = {...result[0],password:'',user_pic:''}
            // 导入jwt生成token字符串 - jwt.sign(用户信息，密钥，有效期)
            const tokenStr = jwt.sign(user,config.jwtSecretKey,{expiresIn:'3h'})
            res.send({ 
                status:0,
                message:'登录成功！',
                token:'Bearer ' + tokenStr
            })
        }
        
       
    })
}